package test;

import com.fasterxml.jackson.annotation.JsonTypeInfo;
import common.Utils;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.time.Duration;

public class DetailPage extends Utils {

    // 这里的 url 必须是有效的博客 id , 若博客 id 失效了将会导致当前类的所有用例执行失败
    private static String url = DetailUrl;

    public DetailPage() {
        super(url);
        System.out.println("detaileUrl:" + url);
    }

    public void checkBlogDetail() throws InterruptedException {
        // 标题
        String titleText = driver.findElement(By.cssSelector("body > div.container > div.right > div > div.title")).getText();
        // 时间
        String timeText = driver.findElement(By.cssSelector("body > div.container > div.right > div > div.date")).getText();
        // 内容
        // #detail > p
        // #h2-u81EAu52A8u5316u8F93u5165u5185u5BB9
//        String contentText = driver.findElement(By.cssSelector("#detail > p")).getText();
//        String contentText = driver.findElement(By.xpath("//*[@id=\"detail\"]//a")).getText();
        String contentText = driver.findElement(By.cssSelector("#detail")).getText();

        // 编辑按钮
        driver.findElement(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(1)"));
        // 删除按钮
        driver.findElement(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(2)"));

        Assertions.assertNotNull(titleText);
        Assertions.assertNotNull(timeText);
        Assertions.assertNotNull(contentText);
    }

    // 博客详情页 -- 编辑功能
    public void checkDetailEdit() throws InterruptedException {
//        // 标题
//        String expectTitle = driver.findElement(By.cssSelector("body > div.container > div.right > div > div.title")).getText();
//        // 点击 编辑 按钮进入到编辑页面
//        driver.findElement(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(1)")).click();
//        // 获取 编辑 页面的标题
//        String actualTitle = driver.findElement(By.cssSelector("#title")).getText();
//
//        // 打印
//        System.out.println("expectTitle: " + expectTitle);
//        System.out.println("actualTitle: " + actualTitle);
//
//        // 校验两个标题是否一样
//        Assertions.assertEquals(expectTitle, actualTitle);
//
//        // 给标题追加内容
//        driver.findElement(By.cssSelector("#title")).sendKeys("--更新之后的标题");
//        // 点击更新按钮
//        driver.findElement(By.cssSelector("#submit")).click();
//
//        String updateTitle = expectTitle + "--更新之后的标题";
//        String actual = driver.findElement(By.cssSelector("body > div.container > div.right > div > div.title")).getText();
//
//        Assertions.assertEquals(updateTitle, actual);


        // 通过编辑按钮进入到编辑页面
        driver.findElement(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(1)")).click();

        Thread.sleep(5000);
        // 检查跳转的 url 是否正确 更新文章
        String updateUrl = driver.getCurrentUrl();
        String updateText = driver.findElement(By.cssSelector("#submit")).getAttribute("value");
        System.out.println("updateText: " + updateText);

        assert updateUrl.contains("update");
        assert updateText.equals("更新文章");

        // 检查点击更新按钮继续回到博客详情页
        driver.findElement(By.cssSelector("#submit")).click();

        wait.until(ExpectedConditions.urlContains("blog_list"));

    }

    // 博客详情页 -- 取消删除功能
    public void checkDetailDel_dismiss(){
        // 编辑之后回到的是博客列表页，手动将页面跳转到博客详情页
        driver.get(url);
        driver.findElement(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(2)")).click();

        // 出现弹窗 -- 等待
        wait.until(ExpectedConditions.alertIsPresent());
        // 处理弹窗
        Alert alert = driver.switchTo().alert();
        // 取消
        alert.dismiss();

        Assertions.assertEquals(url, driver.getCurrentUrl());
        System.out.println("取消删除测试用例执行成功");
    }

    // 确认删除
    public void checkDetailDel_accept(){
        // 编辑之后回到的是博客列表页，手动将页面跳转到博客详情页
        driver.get(url);
        // 点击编辑吗 body > div.container > div.right > div > div.operating > button:nth-child(1)
        driver.findElement(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(2)")).click();

        // 出现弹窗 -- 等待
        wait.until(ExpectedConditions.alertIsPresent());
        // 处理弹窗
        Alert alert = driver.switchTo().alert();
        // 确定 -- 跳转到博客列表页
        alert.accept();

        wait.until(ExpectedConditions.urlContains("blog_list"));
        System.out.println("确认删除测试用例执行成功");
    }
}
